home *** CD-ROM | disk | FTP | other *** search
/ Scene Storm / Scene Storm - Volume 1.iso / coding / asm / utils / tagscreens / tagscreens.asm < prev    next >
Assembly Source File  |  1980-01-03  |  5KB  |  257 lines

  1. ;    TagScreens v1.5 (6.3.92)
  2. ;    (c) 1992 by Martin Berndt
  3. ;    This program is placed in the Public Domain!
  4. ;
  5. ;    - SA_Pens & SA_FullPalette will be added to every new screen
  6. ;    - NTSC/PAL will be selected automatically
  7. ;    - SA_AutoScroll will be added to every new screen
  8. ;    - Special patch for CygnusEd included
  9. ;    - 2nd activation removes all patches
  10. ;    - Option "NOMON" disables PAL/NTSC switching
  11. ;    - Option "NOSCROLL" disables AutoScroll
  12. ;    - Option "SIZE" allows to specify the max. NTSC-Height (NoLace)
  13.  
  14.     include    "exec/funcdef.i"
  15.     include    "exec/types.i"
  16.     include    "exec/initializers.i"
  17.     include    "exec/resident.i"
  18.     include    "exec/libraries.i"
  19.     include    "exec/memory.i"
  20.     include    "exec/execbase.i"
  21.     include    "exec/exec_lib.i"
  22.     include    "intuition/intuition_lib.i"
  23.     include    "intuition/intuition.i"
  24.     include    "graphics/displayinfo.i"
  25.     include    "dos/dos_lib.i"
  26.     include    "utility/tagitem.i"
  27.  
  28. START    move.l    $4.w,a6
  29.     lea    intuiname(pc),a1
  30.     bsr.s    OpenLib
  31.     move.l    d0,a5
  32.     lea    dosname(pc),a1
  33.     bsr.s    OpenLib
  34.     move.l    d0,a4
  35.     exg    a4,a6
  36.     jsr    _LVOOutput(a6)
  37.     move.l    d0,d6
  38.     cmpi.w    #37,LIB_VERSION(a4)
  39.     bcs    badkick
  40.     move.l    #template,d1
  41.     move.l    #argument,d2
  42.     moveq    #0,d3
  43.     jsr    _LVOReadArgs(a6)
  44.     tst.l    d0
  45.     bne.s    ArgsOk
  46.     jsr    _LVOIoErr(a6)
  47.     move.l    d0,d1
  48.     move.l    d3,d2
  49.     jsr    _LVOPrintFault(a6)
  50.     bra    CloseLibs
  51.  
  52. OpenLib    moveq    #0,d0
  53.     jmp    _LVOOpenLibrary(a6)
  54.  
  55. ArgsOk    lea    argument+8(pc),a0
  56.     move.l    (a0),d1
  57.     beq.s    NoSArg
  58.     move.l    d1,a1
  59.     move.l    (a1),(a0)
  60. NoSArg    move.l    d0,d1
  61.     jsr    _LVOFreeArgs(a6)
  62.     exg    a4,a6
  63.     move.l    _LVOOpenScreenTagList+2(a5),a0
  64.     move.l    a0,a2
  65.     lea    Cygnus-Second(a0),a0
  66.     lea    Cygnus(pc),a1
  67.     moveq    #8,d0
  68. loop1    cmp.b    (a0)+,(a1)+
  69.     bne.s    Patch
  70.     dbf    d0,loop1
  71.     jsr    _LVOForbid(a6)
  72.     move.l    #_LVOOpenScreenTagList,d0
  73.     move.l    -4(a2),a0
  74.     bsr.s    SetFunc
  75.     move.l    #_LVOOpenScreen,d0
  76.     move.l    Code_Start+4-Second(a2),a0
  77.     bsr.s    SetFunc
  78.     jsr    _LVOPermit(a6)
  79.     lea    Code_Start-Second(a2),a1
  80.     jsr    _LVOFreeVec(a6)
  81.     lea    text3(pc),a1
  82.     bra.s    ErrorTxt
  83.  
  84. badkick    exg    a4,a6
  85.     lea    text2(pc),a1
  86.     bra.s    ErrorTxt
  87. badmem    lea    text4(pc),a1
  88.     bra.s    ErrorTxt
  89.  
  90. SetFunc    exg    d0,a0
  91.     move.l    a5,a1
  92.     jmp    _LVOSetFunction(a6)
  93.  
  94. Patch    move.l    #Code_End-Code_Start,d0
  95.     move.l    d0,d5
  96.     move.l    #MEMF_CLEAR|MEMF_PUBLIC,d1
  97.     jsr    _LVOAllocVec(a6)
  98.     move.l    d0,d7
  99.     beq.s    badmem
  100.     move.l    d0,a1
  101.     lea    Code_Start(pc),a0
  102.     move.l    d5,d0
  103.     jsr    _LVOCopyMem(a6)
  104.     jsr    _LVOForbid(a6)
  105.     move.l    d7,a0
  106.     addq.w    #4,a0
  107.     move.l    #_LVOOpenScreen,d0    
  108.     move.l    2(a5,d0.w),(a0)+
  109.     bsr.s    SetFunc
  110.     move.l    d7,a0
  111.     lea    Second-Code_Start-4(a0),a0
  112.     move.l    #_LVOOpenScreenTagList,d0
  113.     move.l    2(a5,d0.w),(a0)+
  114.     bsr.s    SetFunc
  115.     jsr    _LVOPermit(a6)
  116.     lea    text1(pc),a1
  117. ErrorTxt    moveq    #0,d3
  118.     move.b    (a1)+,d3
  119.     move.l    a1,d2
  120.     move.l    d6,d1
  121.     exg    a4,a6
  122.     jsr    _LVOWrite(a6)
  123. CloseLibs    exg    a4,a6
  124.     move.l    a4,a1
  125.     jsr    _LVOCloseLibrary(a6)
  126.     move.l    a5,a1
  127.     jsr    _LVOCloseLibrary(a6)
  128.     moveq    #0,d0
  129.     rts
  130.  
  131. text1    dc.b    text2-text1-1
  132.     dc.b    $9b,"0;33;40m>>> TagScreens v1.5 <<<",$9b
  133.     dc.b    "0;31;40m  (c) 1992 by Martin Berndt",10
  134.     dc.b    "_LVOOpenScreen and _LVOOpenScreenTagList patched.",10
  135. text2    dc.b    text3-text2-1
  136.     dc.b    "This tool needs Kickstart v37 or higher",10
  137. text3    dc.b    text4-text3-1
  138.     dc.b    $9b,"0;33;40mTagScreens"
  139.     dc.b    $9b,"0;31;40m removed.",10
  140. text4    dc.b    dosname-text4-1
  141.     dc.b    "Oops... Not enough memory!",10
  142. dosname    dc.b    "dos.library",0
  143. intuiname    dc.b    "intuition.library",0
  144. template    dc.b    "NOMON/S,NOSCROLL/S,SIZE/N",0
  145.     dc.b    "$VER: TagScreens v1.5 (6.3.92)",0
  146.     even
  147.  
  148. Code_Start
  149.     move.l    (sp)+,a0
  150.     jmp    $f80000
  151.     btst    #4,ns_Type(a0)
  152.     beq.s    DoPatch
  153.     move.l    a0,-(sp)
  154.     move.l    ens_Extension(a0),a0
  155.     cmpi.l    #SA_Pens,(a0)
  156.     bne.s    Code_Start
  157.     tst.l    8(a0)
  158.     bne.s    Code_Start
  159.     move.l    (sp)+,a0
  160.  
  161. DoPatch    link    a5,#-$30
  162.     move.l    sp,a1
  163.     movem.l    d0-d1/a0,-(sp)
  164.     move.l    #SA_Pens,(a1)+
  165.     bclr    #4,ns_Type(a0)
  166.     beq.s    SkipExt
  167.     move.l    ens_Extension(a0),a0
  168.     move.l    4(a0),a0
  169.     bra.s    SkipPens
  170. SkipExt    lea    PenDatas(pc),a0
  171. SkipPens    move.l    a0,(a1)+
  172.     move.l    #SA_FullPalette,(a1)+
  173.     moveq    #-1,d0
  174.     move.l    d0,(a1)+
  175.     move.l    argument(pc),d0
  176.     bne.s    NoMon
  177.     move.l    8(sp),a0
  178.     tst.w    ns_Height(a0)
  179.     bmi.s    NoMon
  180.     move.l    #SA_DisplayID,(a1)+
  181.     move.l    argument+8(pc),d0
  182.     bne.s    SizeArg
  183.     move.w    #200,d0
  184. SizeArg    moveq    #0,d1
  185.     move.w    ns_ViewModes(a0),d1
  186.     andi.w    #%1001110011100101,d1
  187.     btst    #2,d1
  188.     beq.s    SkipLace
  189.     add.w    d0,d0
  190. SkipLace    sub.w    ns_Height(a0),d0
  191.     bcs.s    MonPAL
  192.     sub.w    ns_TopEdge(a0),d0
  193.     bcs.s    MonPAL
  194.     ori.l    #NTSC_MONITOR_ID,d1
  195.     bra.s    SetMon
  196. MonPAL    ori.l    #PAL_MONITOR_ID,d1
  197. SetMon    move.l    d1,(a1)+
  198. NoMon    move.l    argument+4(pc),d0
  199.     bne.s    NoScroll
  200.     lea    ScrData(pc),a0
  201.     moveq    #3,d0
  202. ScrLoop    move.l    (a0)+,(a1)+
  203.     dbf    d0,ScrLoop
  204. NoScroll    clr.l    (a1)
  205.     movem.l    (sp)+,d0-d1/a0
  206.     move.l    sp,a1
  207.     jsr    _LVOOpenScreenTagList(a6)
  208.     unlk    a5
  209.     rts
  210.  
  211. Cygnus    dc.b    "CygnusEd",0
  212.     even
  213.  
  214. UseOld    movem.l    (sp)+,a0/a1/a6
  215. UseOld0    jmp    $f80000
  216. Second    movem.l    a0/a1/a6,-(sp)
  217.     move.l    $4.w,a6
  218.     suba.l    a1,a1
  219.     jsr    _LVOFindTask(a6)
  220.     lea    Cygnus(pc),a0
  221.     move.l    d0,a1
  222.     move.l    10(a1),a1
  223.     moveq    #8,d0
  224. loop2    cmp.b    (a0)+,(a1)+
  225.     bne.s    UseOld
  226.     dbf    d0,loop2
  227.     movem.l    (sp)+,a0/a1/a6
  228.     link    a5,#-$50
  229.     move.l    a0,-(sp)
  230.     lea    4(sp),a0
  231. loop3    tst.l    (a1)
  232.     beq.s    gettag
  233.     move.l    (a1)+,(a0)+
  234.     move.l    (a1)+,(a0)+
  235.     bra.s    loop3
  236. gettag    move.l    #SA_Pens,(a0)+
  237.     lea    PenDatas(pc),a1
  238.     move.l    a1,(a0)+
  239.     move.l    argument+4(pc),d0
  240.     bne.s    noscrtag
  241.     lea    ScrData(pc),a1
  242.     moveq    #3,d0
  243. scrtlop    move.l    (a1)+,(a0)+
  244.     dbf    d0,scrtlop
  245. noscrtag    clr.l    (a0)
  246.     move.l    (sp)+,a0
  247.     move.l    sp,a1
  248.     bsr.s    UseOld0
  249.     unlk    a5
  250.     rts
  251.  
  252. PenDatas    dc.w    3,1,1,2,1,3,1,0,2,-1
  253. ScrData    dc.l    SA_Overscan,OSCAN_STANDARD,SA_AutoScroll,-1
  254. argument    dc.l    0,0,0
  255. Code_End
  256.     end
  257.